package com.demo.java.OD1_50.OD16;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Arrays;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【磁盘容量排序】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145513063
 */
public class OdMain {

    public static void main(String[] args) {
        try {
            Scanner s = new Scanner(System.in);
            int n = s.nextInt();  // 读取磁盘数量
            s.nextLine();  // 读取换行符

            // 用于存储每个磁盘的索引和转换后的字节数
            int[][] nums = new int[n][2];
            // 用于存储每个磁盘的原始空间表示
            Map<Integer, String> hashMap = new HashMap<>();

            // 遍历每个磁盘
            for (int i = 0; i < n; i++) {
                int sum = 0;  // 用于累加每个磁盘的字节数
                int index = -1;  // 用于记录上次出现单位的位置
                String value = s.nextLine();  // 读取磁盘容量字符串
                hashMap.put(i + 1, value);  // 保存原始值到hashMap
                // 遍历磁盘容量字符串中的每个字符
                for (int j = 0; j < value.length(); ++j) {
                    // 如果是'M'，计算M的字节数
                    if ('M' == value.charAt(j)) {
                        sum += Integer.parseInt(value.substring(index + 1, j));  // 计算M的容量
                        index = j;  // 更新上次'M'的位置
                    }
                    // 如果是'G'，计算G的字节数
                    else if ('G' == value.charAt(j)) {
                        sum += Integer.parseInt(value.substring(index + 1, j)) * 1024;  // 计算G的容量
                        index = j;  // 更新上次'G'的位置
                    }
                    // 如果是'T'，计算T的字节数
                    else if ('T' == value.charAt(j)) {
                        sum += Integer.parseInt(value.substring(index + 1, j)) * 1024 * 1024;  // 计算T的容量
                        index = j;  // 更新上次'T'的位置
                    }
                }
                // 存储磁盘的索引和字节数
                nums[i][0] = i + 1;
                nums[i][1] = sum;  // 存储磁盘的字节数
            }

            // 根据字节数升序排序，若字节数相同则按原始输入顺序排序
            Arrays.sort(nums, (e1, e2) -> (e1[1] == e2[1] ? (e1[0] - e2[0]) : (e1[1] - e2[1])));

            // 输出排序后的磁盘原始表示
            for (int i = 0; i < n; ++i) {
                // 如果是最后一个元素，则不换行
                if (i == n - 1) {
                    System.out.print(hashMap.get(nums[i][0]));
                } else {
                    System.out.println(hashMap.get(nums[i][0]));  // 否则换行
                }
            }
        } catch (Exception e) {
            // 异常处理
            e.printStackTrace();
        }

    }
}

